//
// Created by Rory on 2020/10/28.
//

#ifndef DATA_STRUCTURE_PROGRAMMING_USING_C_BINARYTREE_H
#define DATA_STRUCTURE_PROGRAMMING_USING_C_BINARYTREE_H

#ifndef ElementType
    #define ElementType int
#endif

#include "../common.h"


/**
 * 线索二叉树
 */
typedef struct{
    ElementType data;

    struct ThreadNode* lchild;
    struct ThreadNode* rchild;

    bool lthread; //false表示lchild指针指向左孩子，true表示lchild指针指向前驱
    bool rthread;

} ThreadNode;

typedef ThreadNode ThreadTree;



/**
 * 二叉树结点中序线索化
 * @param currentNode 要线索化的结点
 * @param pre 线索化结点的前驱结点（如果没有，则传入NULL)
 * @return 返回pre指针的最终值
 */
ThreadNode* InThreadNode(ThreadNode* currentNode, ThreadNode** pre);

/**
 * 将普通二叉树转化为中序线索二叉树
 * @param tree
 */
void CreateInThreadTree(ThreadTree* tree);

#endif //DATA_STRUCTURE_PROGRAMMING_USING_C_BINARYTREE_H
